package org.dromara.demo.designPattern.lsp.service;

import java.math.BigDecimal;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;

public abstract class BankCard {
    private final Logger logger = LoggerFactory.getLogger(BankCard.class);
    private String cardNo; // 卡号
    private String cardDate; // 开卡时间


    public BankCard(String cardNo, String cardDate) {
        this.cardNo = cardNo;
        this.cardDate = cardDate;
    }

    abstract boolean rule(BigDecimal amount);

    public String positive(String orderId, BigDecimal amount) {
      // 入款成功，存款、还款
        logger.info("卡号{} 入款成功，单号：{} 金额：{}", cardNo, orderId, amount);
        return "0000";
    }

    // 逆向入账，减钱
    public String negative(String orderId, BigDecimal amount) {
        // 入款成功，存款、还款
        logger.info("卡号{} 出款成功，单号：{} 金额：{}", cardNo, orderId, amount);
        return "0000";
    }

    /**
     * 交易流水查询
     *
     * @return 交易流水
     */
    public List<String> tradeFlow() {
        logger.info("交易流水查询成功");
        List<String> tradeList = new ArrayList<String>();
        tradeList.add("100001,100.00");
        tradeList.add("100001,80.00");
        tradeList.add("100001,76.50");
        tradeList.add("100001,126.00");
        return tradeList;
    }

    public String getCardNo() {
        return cardNo;
    }

    public String getCardDate() {
        return cardDate;
    }

    /**
     * 在抽象银行卡类中，提供了基本的卡属性，包括卡号、开卡时间及三个核
     * 心方法。正向入账，加钱；逆向入账，减钱。当然，实际的业务开发抽象出来
     * 的逻辑会比模拟场景多一些。接下来继承这个抽象类，实现储蓄卡的功能逻
     * 辑
     */


}
